이벤트 히스토리 설계
이벤트 히스토리 설계
사용자 행동 데이터를 기록하는 DB 스키마 설계 — 정규화 + Key-Value + 인과관계 추적
핵심 개념 정의
| 용어 | 설명 |
|---|---|
| 액션(Action) | 화면 이동/전환 등 더 큰 단위의 상황 (예: MAIN_VIEW) |
| 이벤트(Event) | 화면 내 구체적 동작 (예: SAVE_BUTTON_CLICK, 스크롤) |
1단계: 정의(Definition)와 로그(Log) 분리
| 테이블 | 역할 | 핵심 컬럼 |
|---|---|---|
users |
사용자 마스터 | user_id, email, created_at |
actions |
액션 정의 목록 | action_id, name |
action_logs |
실제 액션 발생 기록 | action_log_id, user_id, action_id |
events |
이벤트 정의 목록 | event_id, name |
event_logs |
실제 이벤트 발생 기록 | event_log_id, action_log_id, value_* |
2단계: 화면 전환 컨텍스트 추가
문제: "어디서 어디로 전환했는지" 분석 불가
해결: event_logs에 from_screen, to_screen 컬럼 추가
event_log_id | user_id | event_id | from_screen | to_screen | session_id | step_order | timestamp
→ 화면 간 이동 경로 추적 가능 (퍼널 분석 기반)
3단계: Key-Value 테이블로 유연한 메타데이터
문제: 타입별 컬럼(value_int 등)은 비정형 정보 저장에 부적합 → NULL 값 증가
해결: event_log_attributes Key-Value 저장소 추가
attribute_id | event_log_id (FK) | key (VARCHAR) | value (TEXT)
예시:
key: 'view_stack',value: 'home→search→detail'key: 'target_element_id',value: 'save_button'
→ DB 스키마 변경 없이 어떤 컨텍스트 데이터도 유연하게 추가 가능
4단계: 이벤트-액션 인과관계 연결
문제: "어떤 액션이 어떤 이벤트를 유발했는가?" 기록 불가
해결: event_logs에 trigger_action_log_id 컬럼 추가
event_log_id | ... | trigger_action_log_id (FK → action_logs) | from_screen | to_screen | ...
→ 이벤트를 유발한 액션 로그 직접 추적 가능
최종 설계: 하이브리드 모델
정규화된 구조 (정의/로그 분리)
+ 타입 명시 컬럼 (action_logs)
+ Key-Value 확장 (event_log_attributes)
+ 인과관계 추적 (trigger_action_log_id)
가능해지는 분석
- 사용자 행동 패턴 분석
- 화면 전환 흐름 (퍼널 분석)
- 이벤트-액션 인과관계 추적
- 유연한 메타데이터 확장